物件之間產生碰撞的偵測,必須兩者都帶有碰撞器,以及其中一方帶有剛體
2D遊戲物件的碰撞器只能使用2D碰撞器,無法將2D遊戲物件與3D碰撞器一起使用,而3D遊戲物件也只能使用3D碰撞器 ,無法使用2D碰撞器。
碰撞器有分成以下幾種:
Box Collider 2D:盒子碰撞器,是一個長方體外形的基本碰撞器,可以用於地板、牆壁或箱子等物件
Circle Collider 2D:圓形碰撞器,大小可以均勻等地調節,但不能單獨調節某個坐標軸方向的大小
Capsule Collider 2D:膠囊碰撞器,半徑和高度都可以單獨調節,可用在角色或與其他不規則形狀的碰撞結合來使用
Polygon Collider 2D:多邊形碰撞器
Edit Collider:手動調整碰撞框的大小
Is Trigger:勾選後物件不會與其他物件有碰撞,而是會變成穿透過去來判斷是否有碰觸
Size:直接設定碰撞框的長寬來決定碰撞框的大小
在使用碰撞器時,通常會先設定好遊戲物件的Tag屬性,可以用來去篩選碰撞到帶有標籤的物件才去執行後續的動作
或是想要兩個物件之間不發生碰撞可以先設定好Layer,從Unity最上方的選單Edit -> Project Settings -> Physics底下的矩陣,可以決定每個Layer屬性之間是否產生碰撞,像是取消掉human與human之間的選項後,帶有human屬性的物件就不會和另一個有human屬性的物件發生碰撞
OnCollision分為以下三類:
OnCollisionEnter:當碰撞發生的第一個瞬間開始執行
OnCollisionStay:只要維持在碰撞的狀態,就會一直重複執行。
OnCollisionExit: 當碰撞的狀態結束時才會開始執行。
OnTrigger也和OnCollision一樣只是條件變成碰觸
用OnCollisionEnter用來判斷是否有碰撞到玩家,像是玩家被投擲物擊中受到傷害
void OnCollisionEnter(Collision coll) {
if (coll.gameObject.tag == "player") {
Player_HP -= 10;
Debug.Log("hit");
}
}
用OnTriggerEnter用來判斷是否有碰觸,像是怪物被玩家揮劍砍中
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "sword") {
Monster_HP -= 100;
Debug.Log("HP -100");
}
參考資料
https://docs.unity3d.com/Manual/Collider2D.html